#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=1e5;
typedef long long LL;
inline LL read(){LL x=0,f=1;char ch=getchar();	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
int main(void)
{
    cin.tie(0);std::ios::sync_with_stdio(false);
	int n;
	cin >> n;
	cout << "? 1 " << n << endl;
	int midpos;
	cin >> midpos;

	int res, pos;
	if(midpos == 1){
		int l = midpos + 1;
		int r = n;
		while(l <= r){
			int mid = l + r >> 1;
			cout << "? " << midpos << " " << mid << endl;
			cin >> pos;
			if(pos == midpos){
				res = mid;
				r = mid - 1;
			}
			else l = mid + 1;
		}
	}
	else if(midpos == n){
		int l = 1;
		int r = midpos-1;
		while(l <= r){
			int mid = l + r >> 1;
			cout << "? " << mid << " " << midpos << endl;
			cin >> pos;
			if(pos == midpos){
				res = mid;
				l = mid+1;
			}
			else r = mid-1;
		}
	}
	else{
		int midpos;
		cout << "? " << 1 << " " << n << endl;
		cin >> midpos;
		if(midpos == ind){
			int l = 1;
			int r = midpos-1;
			while(l <= r){
				int mid = l + r >> 1;
				cout << "? " << mid << " " << midpos << endl;
				cin >> pos;
				if(pos == midpos){
					res = mid;
					l = mid+1;
				}
				else r = mid-1;
			}
		}
		else{
			int l = midpos + 1;
			int r = n;
			while(l <= r){
				int mid = l + r >> 1;
				cout << "? " << midpos<< " " << mid << endl;
				cin >> pos;
				if(pos == midpos){
					res = mid;
					r = mid - 1;
				}
				else l = mid + 1;
			}
		}
	}

	cout << "! " << res << endl;

    return 0;
}

return 0;
}
